package com.palm.easy.service;

import com.palm.easy.domain.FileData;
import com.palm.easy.domain.FileInfo;
import com.palm.easy.domain.LogPart;
import com.palm.easy.domain.Service;

import org.noear.nami.annotation.NamiClient;



import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 用于远程调用时，方法名不能重名，否则会出现调用错误
 */
@NamiClient(path = "/server")
public interface Server {

    String host();
    /**============== 服务管理相关 ============**/
    /**
     * 更新文件
     * @param service
     * @param file
     * @return
     */
    void uploadFile(Service service,Map<String,String> configs, byte[] file);
    Collection<Service> listService();
    void addService(Service service);
    void saveService(Service service);
    void deleteService(Service service);
    boolean startService(Service service,Map<String,String> configs);
    boolean stopService(Service service);

    /**
     * 获取服务日志
     * @param service
     * @param pos 为0时获取最后10行
     * @return
     */
    LogPart getLog(String service, long pos);

    /**============== 文件相关 ============**/
    /**
     * 文件列表
     * @param path
     * @return
     */
    List<FileInfo> fileList(String path);
    /**
     * 获取文件的文本内容
     * @param path
     * @return
     */
    String loadFile(String path);
    /**
     * 保存文本文件
     * @param path
     * @param file
     */
    void saveFile(String path, String file);
    /**
     * 导出压缩文件
     * @param path
     * @return
     */
   FileData exportFile(String path);

    /**
     * 上传文件到目录
     * @param path
     * @param fd
     */
    void uploadServerFile(String path, FileData fd);

    /**
     * 解压服务器文件
     * @param path
     * @return
     */
    boolean unZipFile(String path);

    /**
     * 移除服务器文件
     * @param path
     * @return
     */
    boolean removeFile(String path);

    Map<String,Object> status();
    Map<String,Object> serviceStatus(Service service);

    void newFile(String path, String file);
    void newDir(String path, String file);

    boolean reName(String path, String newName);
}
